from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import gettext_lazy as _

from .manager import CustomUserManager


class SiteUser(AbstractUser):
    """ Модель, описывающая пользователя сайта (администратора или менеджера) """

    USER_STATUS_CHOICE = (
        ('administrator', 'Администратор'),
        ('manager', 'Менеджер'),
    )
    username = None
    email = models.EmailField(_('Почта'), unique=True)
    user_status = models.CharField('Статус пользователя', max_length=15, choices=USER_STATUS_CHOICE)
    is_confirmed_by_administrator = models.BooleanField('Подтвержден администратором', default=False)

    is_staff = models.BooleanField(
        _("staff status"),
        default=True,
        help_text=_("Designates whether the user can log into this admin site."),
    )
    is_superuser = models.BooleanField(default=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

    class Meta:
        verbose_name = 'Пользователь сайта (администратор, менеджер)'
        verbose_name_plural = 'Пользователи сайта (администраторы, менеджеры)'


class Account(models.Model):

    STATUS_CHOICE = (
        ('ban', 'Бан'),
        ('product_pump_layout', 'Выкладка памп товара'),
        ('unsubscribe_in_th', 'Отписать в тх вопросы на почту'),
        ('put_product_on_sale', 'Выкладка товара на продажу'),
        ('ok', 'OK'),
        ('product_is_paid_for', 'Товар оплачен'),
        ('relist', 'Релист')
    )

    additional_information = models.ForeignKey(
        'AccountAdditionalInformation',
        on_delete=models.CASCADE,
        verbose_name='Логины, пароли',
        null=True, blank=True)

    data_per_person_with_registration = models.ForeignKey(
        'TableUser',
        on_delete=models.CASCADE,
        verbose_name='Пользователь',
        null=True, blank=True)

    link_to_store = models.CharField('Магазин', max_length=250)
    status = models.CharField('Статус', max_length=50, choices=STATUS_CHOICE)
    purchase_amount = models.PositiveIntegerField('Сумма')
    payment_date = models.DateTimeField('Дата выплаты')
    track_code = models.CharField('Трек код', max_length=15)
    product_for_display_and_location = models.CharField('Товар для выкладки и локация', max_length=250)
    date_of_creation = models.DateTimeField('Создан', auto_now_add=True)

    class Meta:
        verbose_name = 'Аккаунт'
        verbose_name_plural = 'Аккаунты'

    def __str__(self):
        return f'Аккаунт {self.pk}'



class AccountAdditionalInformation(models.Model):
    """ Дополнительная информация аккаунта """

    dolphin_login = models.CharField('Логин дельфин', max_length=250, null=True, blank=True)
    dolphin_password = models.CharField('Пароль дельфин', max_length=250, null=True, blank=True)
    mail_login = models.EmailField('Логин почты', max_length=254, null=True, blank=True)
    mail_password = models.CharField('Пароль почты', max_length=254, null=True, blank=True)

    class Meta:
        verbose_name = 'Дополнительная информация (логины, пароли)'
        verbose_name_plural = 'Дополнительные данные (логины, пароли)'

    def __str__(self):
        return f'{self.dolphin_login}/{self.mail_login}'


class TableUser(models.Model):
    """ Пользователь из таблицы """

    name = models.CharField('Имя', max_length=250)
    surname = models.CharField('Фамилия', max_length=250)
    address = models.CharField('Адрес', max_length=250)
    date_of_birth = models.DateField('Дата рождения')
    date_of_creation = models.DateTimeField('Дата создания', auto_now_add=True)

    class Meta:
        verbose_name = 'Пользователь из таблицы'
        verbose_name_plural = 'Пользователи из таблицы'

    def __str__(self):
        return f'{self.name} {self.surname}'
